package org.example;

import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaRDD;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;


public class spark {
    public static void main(String[] args) {
        final JavaSparkContext sc = new JavaSparkContext("local","spark");
        final List<Integer> nums = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        final JavaRDD<Integer> rdd = sc.parallelize(nums);
        System.out.println(rdd.collect());
        System.out.println(rdd.partitions().size());

        //练习题：使用map映射将(rdd.count())的数据加倍
        //1.文件读取
        final JavaRDD<String> rddText = sc.textFile("E:\\spark24\\text.txt",5);
        System.out.println(rddText.collect());
//2.文件分布式存储
 //       rddText.saveAsTextFile("output");
//        final JavaRDD<Object> mapRDD = rdd.map(new Function<Integer,Object>(){
//           @Deprecated
//            public Object call(Integer integer) throws Exception {
//               return integer * 2;
//           }
//       });
        //lambda语法:当匿名函数只有一个复写方法则可以用箭头函数替代
 //       final JavaRDD<Object> mapRDD = rdd.map((Function<Integer,Object>) ->integer * 2
         final JavaRDD<Object> mapRDD = rdd.map(num -> num * 2);
         System.out.println(mapRDD.collect());
         sc.parallelize(Arrays.asList(1,2,3,4,5),2)
                 .map(tp -> tp * tp)
                 .sortBy(cp -> cp,false,1)
                         .collect()
                                 .forEach(System.out::println);

//排序 第一个参数表示排序的规则，第二个true表示升序，false表示降序 第三个是分区


//释放资源
        sc.close();
    }
}
